🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / mesh_service_example / src / main / kotlin / com / meshtastic / android / meshserviceexample / MeshServiceViewModel.kt
Displaying Raw • Download
mesh_service_example/src/main/kotlin/com/meshtastic/android/meshserviceexample/MeshServiceViewModel.kt e249461e3c77e41a3928c01537da0a173c687621 (e249461e) Text, 13.12 KB
T8b949e/*
* Copyright (c) 2025-2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787com.meshtastic.android.meshserviceexample
Tff7b72import T7ee787android.content.Intent
Tff7b72import T7ee787android.os.Build
Tff7b72import T7ee787android.os.Parcelable
Tff7b72import T7ee787android.os.RemoteException
Tff7b72import T7ee787android.util.Log
Tff7b72import T7ee787androidx.lifecycle.ViewModel
Tff7b72import T7ee787kotlinx.coroutines.flow.MutableStateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.StateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.asStateFlow
Tff7b72import T7ee787okio.ByteString.Companion.toByteString
Tff7b72import T7ee787org.meshtastic.core.common.util.nowMillis
Tff7b72import T7ee787org.meshtastic.core.common.util.toDate
Tff7b72import T7ee787org.meshtastic.core.common.util.toInstant
Tff7b72import T7ee787org.meshtastic.core.model.DataPacket
Tff7b72import T7ee787org.meshtastic.core.model.MessageStatus
Tff7b72import T7ee787org.meshtastic.core.model.MyNodeInfo
Tff7b72import T7ee787org.meshtastic.core.model.NodeInfo
Tff7b72import T7ee787org.meshtastic.core.model.Position
Tff7b72import T7ee787org.meshtastic.core.service.IMeshService
Tff7b72import T7ee787org.meshtastic.proto.PortNum
Tff7b72import T7ee787java.text.SimpleDateFormat
Tff7b72import T7ee787java.util.Locale
Tff7b72import T7ee787kotlin.random.Random
Tff7b72private Tff7b72const Tff7b72val Te6edf3TAG Tff7b72= Ta5d6ff"Ta5d6ffMeshServiceViewModelTa5d6ff"
T8b949e/** ViewModel for MeshServiceExample. Handles interaction with IMeshService AIDL and manages UI state. */
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffTooManyFunctionsTa5d6ff"Tb4b4b4)
Tff7b72class T56d364MeshServiceViewModel Tb4b4b4: Te6edf3ViewModelTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72private Tff7b72var Te6edf3meshServiceTb4b4b4: Te6edf3IMeshService? Tff7b72= Tff7b72null
Tff7b72private Tff7b72val Te6edf3_myNodeInfo Tff7b72= Te6edf3MutableStateFlowTff7b72<Te6edf3MyNodeInfo?Tff7b72>Tb4b4b4(Tff7b72nullTb4b4b4)
Tff7b72val Te6edf3myNodeInfoTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3MyNodeInfo?Tff7b72> Tff7b72= Te6edf3_myNodeInfoTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3_myId Tff7b72= Te6edf3MutableStateFlowTff7b72<Tffa657String?Tff7b72>Tb4b4b4(Tff7b72nullTb4b4b4)
Tff7b72val Te6edf3myIdTb4b4b4: Te6edf3StateFlowTff7b72<Tffa657String?Tff7b72> Tff7b72= Te6edf3_myIdTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3_nodes Tff7b72= Te6edf3MutableStateFlowTff7b72<Te6edf3ListTff7b72<Te6edf3NodeInfoTff7b72>Tff7b72>Tb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3nodesTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3ListTff7b72<Te6edf3NodeInfoTff7b72>Tff7b72> Tff7b72= Te6edf3_nodesTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3_serviceConnectionStatus Tff7b72= Te6edf3MutableStateFlowTb4b4b4(Tff7b72falseTb4b4b4)
Tff7b72val Te6edf3serviceConnectionStatusTb4b4b4: Te6edf3StateFlowTff7b72<Tffa657BooleanTff7b72> Tff7b72= Te6edf3_serviceConnectionStatusTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3_message Tff7b72= Te6edf3MutableStateFlowTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72val Te6edf3messageTb4b4b4: Te6edf3StateFlowTff7b72<Tffa657StringTff7b72> Tff7b72= Te6edf3_messageTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3_connectionState Tff7b72= Te6edf3MutableStateFlowTb4b4b4(Ta5d6ff"Ta5d6ffUNKNOWNTa5d6ff"Tb4b4b4)
Tff7b72val Te6edf3connectionStateTb4b4b4: Te6edf3StateFlowTff7b72<Tffa657StringTff7b72> Tff7b72= Te6edf3_connectionStateTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3_packetLog Tff7b72= Te6edf3MutableStateFlowTff7b72<Te6edf3ListTff7b72<Tffa657StringTff7b72>Tff7b72>Tb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3packetLogTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3ListTff7b72<Tffa657StringTff7b72>Tff7b72> Tff7b72= Te6edf3_packetLogTb4b4b4.Te6edf3asStateFlowTb4b4b4(Tb4b4b4)
Tff7b72fun Td2a8ffonServiceConnectedTb4b4b4(Te6edf3serviceTb4b4b4: Te6edf3IMeshService?Tb4b4b4) Tb4b4b4{
Te6edf3meshService Tff7b72= Te6edf3service
Te6edf3_serviceConnectionStatusTb4b4b4.Te6edf3value Tff7b72= Tff7b72true
Te6edf3updateAllDataTb4b4b4(Tb4b4b4)
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffService ConnectedTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72fun Td2a8ffonServiceDisconnectedTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3meshService Tff7b72= Tff7b72null
Te6edf3_serviceConnectionStatusTb4b4b4.Te6edf3value Tff7b72= Tff7b72false
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffService DisconnectedTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72private Tff7b72fun Td2a8ffupdateAllDataTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3requestMyNodeInfoTb4b4b4(Tb4b4b4)
Te6edf3requestNodesTb4b4b4(Tb4b4b4)
Te6edf3updateConnectionStateTb4b4b4(Tb4b4b4)
Te6edf3updateMyIdTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tff7b72fun Td2a8ffupdateMyIdTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3meshServiceTff7b72?.Te6edf3let Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3_myIdTb4b4b4.Te6edf3value Tff7b72= Tffa657itTb4b4b4.Te6edf3myId
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3RemoteExceptionTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3eTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffFailed to get MyIdTa5d6ff"Tb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffupdateConnectionStateTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3meshServiceTff7b72?.Te6edf3let Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72val Te6edf3state Tff7b72= Tffa657itTb4b4b4.Te6edf3connectionStateTb4b4b4(Tb4b4b4) Tff7b72?: Ta5d6ff"Ta5d6ffUNKNOWNTa5d6ff"
Te6edf3_connectionStateTb4b4b4.Te6edf3value Tff7b72= Te6edf3state
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffConnection State: Tffd700$Te6edf3stateTa5d6ff"Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3RemoteExceptionTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3eTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffFailed to get connection stateTa5d6ff"Tb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffsendMessageTb4b4b4(Te6edf3textTb4b4b4: Tffa657StringTb4b4b4) Tb4b4b4{
Te6edf3meshServiceTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3service Tff7b72-Tff7b72>
Tff7b72try Tb4b4b4{
Tff7b72val Te6edf3packet Tff7b72=
Te6edf3DataPacketTb4b4b4(
Te6edf3to Tff7b72= Te6edf3DataPacketTb4b4b4.Te6edf3ID_BROADCASTTb4b4b4,
Te6edf3bytes Tff7b72= Te6edf3textTb4b4b4.Te6edf3encodeToByteArrayTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toByteStringTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3dataType Tff7b72= Te6edf3PortNumTb4b4b4.Te6edf3TEXT_MESSAGE_APPTb4b4b4.Te6edf3valueTb4b4b4,
Te6edf3from Tff7b72= Te6edf3DataPacketTb4b4b4.Te6edf3ID_LOCALTb4b4b4,
Te6edf3time Tff7b72= Te6edf3nowMillisTb4b4b4,
Te6edf3id Tff7b72= Te6edf3serviceTb4b4b4.Te6edf3packetIdTb4b4b4,
Te6edf3status Tff7b72= Te6edf3MessageStatusTb4b4b4.Te6edf3UNKNOWNTb4b4b4,
Te6edf3hopLimit Tff7b72= T79c0ff3Tb4b4b4,
Te6edf3channel Tff7b72= T79c0ff0Tb4b4b4,
Te6edf3wantAck Tff7b72= Tff7b72trueTb4b4b4,
Tb4b4b4)
Te6edf3serviceTb4b4b4.Te6edf3sendTb4b4b4(Te6edf3packetTb4b4b4)
Te6edf3LogTb4b4b4.Te6edf3dTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffMessage sent successfully, assigned ID: Tffd700${Te6edf3packetTb4b4b4.Te6edf3idTffd700}Ta5d6ff"Tb4b4b4)
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffSent: Tffd700$Te6edf3textTa5d6ff (ID: Tffd700${Te6edf3packetTb4b4b4.Te6edf3idTffd700}Ta5d6ff)Ta5d6ff"Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3RemoteExceptionTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3eTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffFailed to send messageTa5d6ff"Tb4b4b4, Te6edf3eTb4b4b4)
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffFailed to send message: Tffd700${Te6edf3eTb4b4b4.Te6edf3messageTffd700}Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4} Tff7b72?: Te6edf3LogTb4b4b4.Te6edf3wTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffMeshService is not bound, cannot send messageTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72fun Td2a8ffsendSpecialPacketTb4b4b4(Te6edf3portNumTb4b4b4: Te6edf3PortNumTb4b4b4) Tb4b4b4{
Te6edf3meshServiceTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3service Tff7b72-Tff7b72>
Tff7b72try Tb4b4b4{
Tff7b72val Te6edf3packet Tff7b72=
Te6edf3DataPacketTb4b4b4(
Te6edf3to Tff7b72= Te6edf3DataPacketTb4b4b4.Te6edf3ID_BROADCASTTb4b4b4,
Te6edf3bytes Tff7b72= Ta5d6ff"Ta5d6ffSpecial Payload for Tffd700${Te6edf3portNumTb4b4b4.Te6edf3nameTffd700}Ta5d6ff"Tb4b4b4.Te6edf3encodeToByteArrayTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toByteStringTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3dataType Tff7b72= Te6edf3portNumTb4b4b4.Te6edf3valueTb4b4b4,
Te6edf3from Tff7b72= Te6edf3DataPacketTb4b4b4.Te6edf3ID_LOCALTb4b4b4,
Te6edf3time Tff7b72= Te6edf3nowMillisTb4b4b4,
Te6edf3id Tff7b72= Te6edf3serviceTb4b4b4.Te6edf3packetIdTb4b4b4,
Te6edf3status Tff7b72= Te6edf3MessageStatusTb4b4b4.Te6edf3UNKNOWNTb4b4b4,
Te6edf3hopLimit Tff7b72= T79c0ff3Tb4b4b4,
Te6edf3channel Tff7b72= T79c0ff0Tb4b4b4,
Te6edf3wantAck Tff7b72= Tff7b72trueTb4b4b4,
Tb4b4b4)
Te6edf3serviceTb4b4b4.Te6edf3sendTb4b4b4(Te6edf3packetTb4b4b4)
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffSent Tffd700${Te6edf3portNumTb4b4b4.Te6edf3nameTffd700}Ta5d6ff Packet (ID: Tffd700${Te6edf3packetTb4b4b4.Te6edf3idTffd700}Ta5d6ff)Ta5d6ff"Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3RemoteExceptionTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3eTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffFailed to send special packetTa5d6ff"Tb4b4b4, Te6edf3eTb4b4b4)
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffFailed to send Tffd700${Te6edf3portNumTb4b4b4.Te6edf3nameTffd700}Ta5d6ff packet: Tffd700${Te6edf3eTb4b4b4.Te6edf3messageTffd700}Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffrequestMyNodeInfoTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3meshServiceTff7b72?.Te6edf3let Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3_myNodeInfoTb4b4b4.Te6edf3value Tff7b72= Tffa657itTb4b4b4.Te6edf3myNodeInfo
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3RemoteExceptionTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3eTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffFailed to get MyNodeInfoTa5d6ff"Tb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffrequestNodesTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3meshServiceTff7b72?.Te6edf3let Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3_nodesTb4b4b4.Te6edf3value Tff7b72= Tffa657itTb4b4b4.Te6edf3nodes Tff7b72?: Te6edf3emptyListTb4b4b4(Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3RemoteExceptionTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3eTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffFailed to get nodesTa5d6ff"Tb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffstartProvideLocationTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3meshServiceTff7b72?.Te6edf3startProvideLocationTb4b4b4(Tb4b4b4)
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffStarted GPS sharingTa5d6ff"Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3RemoteExceptionTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3eTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffFailed to start providing locationTa5d6ff"Tb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffstopProvideLocationTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3meshServiceTff7b72?.Te6edf3stopProvideLocationTb4b4b4(Tb4b4b4)
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffStopped GPS sharingTa5d6ff"Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3RemoteExceptionTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3eTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffFailed to stop providing locationTa5d6ff"Tb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffrequestTracerouteTb4b4b4(Te6edf3nodeNumTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Te6edf3meshServiceTff7b72?.Te6edf3let Tb4b4b4{
Tff7b72try Tb4b4b4{
Tffa657itTb4b4b4.Te6edf3requestTracerouteTb4b4b4(Te6edf3RandomTb4b4b4.Te6edf3nextIntTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3nodeNumTb4b4b4)
Te6edf3LogTb4b4b4.Te6edf3iTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffTraceroute requested for node Tffd700$Te6edf3nodeNumTa5d6ff"Tb4b4b4)
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffRequested Traceroute for Tffd700$Te6edf3nodeNumTa5d6ff"Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3RemoteExceptionTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3eTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffFailed to request tracerouteTa5d6ff"Tb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffrequestTelemetryTb4b4b4(Te6edf3nodeNumTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Te6edf3meshServiceTff7b72?.Te6edf3let Tb4b4b4{
Tff7b72try Tb4b4b4{
Tffa657itTb4b4b4.Te6edf3requestTelemetryTb4b4b4(Te6edf3RandomTb4b4b4.Te6edf3nextIntTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3nodeNumTb4b4b4, T79c0ff1Tb4b4b4)
Te6edf3LogTb4b4b4.Te6edf3iTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffTelemetry requested for node Tffd700$Te6edf3nodeNumTa5d6ff"Tb4b4b4)
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffRequested Telemetry for Tffd700$Te6edf3nodeNumTa5d6ff"Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3RemoteExceptionTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3eTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffFailed to request telemetryTa5d6ff"Tb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffrequestNeighborInfoTb4b4b4(Te6edf3nodeNumTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Te6edf3meshServiceTff7b72?.Te6edf3let Tb4b4b4{
Tff7b72try Tb4b4b4{
Tffa657itTb4b4b4.Te6edf3requestNeighborInfoTb4b4b4(Te6edf3RandomTb4b4b4.Te6edf3nextIntTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3nodeNumTb4b4b4)
Te6edf3LogTb4b4b4.Te6edf3iTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffNeighbor info requested for node Tffd700$Te6edf3nodeNumTa5d6ff"Tb4b4b4)
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffRequested Neighbors for Tffd700$Te6edf3nodeNumTa5d6ff"Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3RemoteExceptionTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3eTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffFailed to request neighbor infoTa5d6ff"Tb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffrequestPositionTb4b4b4(Te6edf3nodeNumTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Te6edf3meshServiceTff7b72?.Te6edf3let Tb4b4b4{
Tff7b72try Tb4b4b4{
Tffa657itTb4b4b4.Te6edf3requestPositionTb4b4b4(Te6edf3nodeNumTb4b4b4, Te6edf3PositionTb4b4b4(T79c0ff0.0Tb4b4b4, T79c0ff0.0Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4)
Te6edf3LogTb4b4b4.Te6edf3iTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffPosition requested for node Tffd700$Te6edf3nodeNumTa5d6ff"Tb4b4b4)
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffRequested Position for Tffd700$Te6edf3nodeNumTa5d6ff"Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3RemoteExceptionTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3eTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffFailed to request positionTa5d6ff"Tb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffrequestUserInfoTb4b4b4(Te6edf3nodeNumTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Te6edf3meshServiceTff7b72?.Te6edf3let Tb4b4b4{
Tff7b72try Tb4b4b4{
Tffa657itTb4b4b4.Te6edf3requestUserInfoTb4b4b4(Te6edf3nodeNumTb4b4b4)
Te6edf3LogTb4b4b4.Te6edf3iTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffUser info requested for node Tffd700$Te6edf3nodeNumTa5d6ff"Tb4b4b4)
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffRequested User Info for Tffd700$Te6edf3nodeNumTa5d6ff"Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3RemoteExceptionTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3eTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffFailed to request user infoTa5d6ff"Tb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffrequestDeviceConnectionStatusTb4b4b4(Te6edf3nodeNumTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Te6edf3meshServiceTff7b72?.Te6edf3let Tb4b4b4{
Tff7b72try Tb4b4b4{
Tffa657itTb4b4b4.Te6edf3getDeviceConnectionStatusTb4b4b4(Te6edf3RandomTb4b4b4.Te6edf3nextIntTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3nodeNumTb4b4b4)
Te6edf3LogTb4b4b4.Te6edf3iTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffDevice connection status requested for node Tffd700$Te6edf3nodeNumTa5d6ff"Tb4b4b4)
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffRequested Connection Status for Tffd700$Te6edf3nodeNumTa5d6ff"Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3RemoteExceptionTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3eTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffFailed to request device connection statusTa5d6ff"Tb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffrebootLocalDeviceTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3meshServiceTff7b72?.Te6edf3let Tb4b4b4{
Tff7b72try Tb4b4b4{
Tffa657itTb4b4b4.Te6edf3requestRebootTb4b4b4(Te6edf3RandomTb4b4b4.Te6edf3nextIntTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff0Tb4b4b4)
Te6edf3LogTb4b4b4.Te6edf3wTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffLocal reboot requested!Ta5d6ff"Tb4b4b4)
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffRequested Local RebootTa5d6ff"Tb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3RemoteExceptionTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3eTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffFailed to request rebootTa5d6ff"Tb4b4b4, Te6edf3eTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8ffhandleIncomingIntentTb4b4b4(Te6edf3intentTb4b4b4: Te6edf3IntentTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3action Tff7b72= Te6edf3intentTb4b4b4.Te6edf3action Tff7b72?: Tff7b72return
Te6edf3LogTb4b4b4.Te6edf3dTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffReceived broadcast: Tffd700$Te6edf3actionTa5d6ff"Tb4b4b4)
Tff7b72when Tb4b4b4(Te6edf3actionTb4b4b4) Tb4b4b4{
Ta5d6ff"Ta5d6ffcom.geeksville.mesh.NODE_CHANGETa5d6ff" Tff7b72-Tff7b72> Te6edf3handleNodeChangeTb4b4b4(Te6edf3intentTb4b4b4)
Ta5d6ff"Ta5d6ffcom.geeksville.mesh.CONNECTION_CHANGEDTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffcom.geeksville.mesh.MESH_CONNECTEDTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffcom.geeksville.mesh.MESH_DISCONNECTEDTa5d6ff"Tb4b4b4,
Tff7b72-Tff7b72> Te6edf3updateConnectionStateTb4b4b4(Tb4b4b4)
Ta5d6ff"Ta5d6ffcom.geeksville.mesh.MESSAGE_STATUSTa5d6ff" Tff7b72-Tff7b72> Te6edf3handleMessageStatusTb4b4b4(Te6edf3intentTb4b4b4)
Tff7b72else Tff7b72-Tff7b72>
Tff7b72if Tb4b4b4(Te6edf3actionTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"Ta5d6ffcom.geeksville.mesh.RECEIVED.Ta5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3handleReceivedPacketTb4b4b4(Te6edf3actionTb4b4b4, Te6edf3intentTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72private Tff7b72fun Td2a8ffhandleNodeChangeTb4b4b4(Te6edf3intentTb4b4b4: Te6edf3IntentTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3nodeInfo Tff7b72= Te6edf3intentTb4b4b4.Te6edf3getParcelableCompatTb4b4b4(Ta5d6ff"Ta5d6ffcom.geeksville.mesh.NodeInfoTa5d6ff"Tb4b4b4, Te6edf3NodeInfoTff7b72::Te6edf3classTb4b4b4.Te6edf3javaTb4b4b4)
Te6edf3nodeInfoTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3ni Tff7b72-Tff7b72>
Te6edf3LogTb4b4b4.Te6edf3dTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffNode updated: Tffd700${Te6edf3niTb4b4b4.Te6edf3numTffd700}Ta5d6ff"Tb4b4b4)
Te6edf3_nodesTb4b4b4.Te6edf3value Tff7b72=
Te6edf3_nodesTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3toMutableListTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Tff7b72val Te6edf3index Tff7b72= Te6edf3indexOfFirst Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3num Tff7b72=Tff7b72= Te6edf3niTb4b4b4.Te6edf3num Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3index Tff7b72!Tff7b72= Tff7b72-T79c0ff1Tb4b4b4) Tff7b72setTb4b4b4(Te6edf3indexTb4b4b4, Te6edf3niTb4b4b4) Tff7b72else Te6edf3addTb4b4b4(Te6edf3niTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72private Tff7b72fun Td2a8ffhandleMessageStatusTb4b4b4(Te6edf3intentTb4b4b4: Te6edf3IntentTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3id Tff7b72= Te6edf3intentTb4b4b4.Te6edf3getIntExtraTb4b4b4(Ta5d6ff"Ta5d6ffcom.geeksville.mesh.PacketIdTa5d6ff"Tb4b4b4, T79c0ff0Tb4b4b4)
Tff7b72val Te6edf3status Tff7b72= Te6edf3intentTb4b4b4.Te6edf3getParcelableCompatTb4b4b4(Ta5d6ff"Ta5d6ffcom.geeksville.mesh.StatusTa5d6ff"Tb4b4b4, Te6edf3MessageStatusTff7b72::Te6edf3classTb4b4b4.Te6edf3javaTb4b4b4)
Te6edf3LogTb4b4b4.Te6edf3dTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffMessage Status for ID Tffd700$Te6edf3idTa5d6ff: Tffd700$Te6edf3statusTa5d6ff"Tb4b4b4)
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffMsg Status ID Tffd700$Te6edf3idTa5d6ff: Tffd700$Te6edf3statusTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72private Tff7b72fun Td2a8ffhandleReceivedPacketTb4b4b4(Te6edf3actionTb4b4b4: Tffa657StringTb4b4b4, Te6edf3intentTb4b4b4: Te6edf3IntentTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3packet Tff7b72= Te6edf3intentTb4b4b4.Te6edf3getParcelableCompatTb4b4b4(Ta5d6ff"Ta5d6ffcom.geeksville.mesh.PayloadTa5d6ff"Tb4b4b4, Te6edf3DataPacketTff7b72::Te6edf3classTb4b4b4.Te6edf3javaTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3packet Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3LogTb4b4b4.Te6edf3eTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffReceived packet extra was NULL for action: Tffd700$Te6edf3actionTa5d6ff"Tb4b4b4)
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffError: Packet payload was null for Tffd700$Te6edf3actionTa5d6ff"Tb4b4b4)
Tff7b72return
Tb4b4b4}
Te6edf3LogTb4b4b4.Te6edf3dTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffPacket received: Tffd700$Te6edf3packetTa5d6ff"Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3packetTb4b4b4.Te6edf3dataType Tff7b72=Tff7b72= Te6edf3PortNumTb4b4b4.Te6edf3TEXT_MESSAGE_APPTb4b4b4.Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3receivedText Tff7b72= Te6edf3packetTb4b4b4.Te6edf3bytesTff7b72?.Te6edf3utf8Tb4b4b4(Tb4b4b4) Tff7b72?: Ta5d6ff"Ta5d6ff"
Te6edf3_messageTb4b4b4.Te6edf3value Tff7b72= Ta5d6ff"Ta5d6ffFrom Tffd700${Te6edf3packetTb4b4b4.Te6edf3fromTffd700}Ta5d6ff: Tffd700$Te6edf3receivedTextTa5d6ff"
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffReceived Text from Tffd700${Te6edf3packetTb4b4b4.Te6edf3fromTffd700}Ta5d6ff: Tffd700$Te6edf3receivedTextTa5d6ff"Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72val Te6edf3type Tff7b72= Te6edf3actionTb4b4b4.Te6edf3substringAfterLastTb4b4b4(Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4)
Te6edf3addToLogTb4b4b4(Ta5d6ff"Ta5d6ffReceived Tffd700$Te6edf3typeTa5d6ff from Tffd700${Te6edf3packetTb4b4b4.Te6edf3fromTffd700}Ta5d6ff. Check Logcat for details.Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72private Tff7b72fun Td2a8ffaddToLogTb4b4b4(Te6edf3entryTb4b4b4: Tffa657StringTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3date Tff7b72= Te6edf3nowMillisTb4b4b4.Te6edf3toInstantTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toDateTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3timestamp Tff7b72= Te6edf3SimpleDateFormatTb4b4b4(Ta5d6ff"Ta5d6ffHH:mm:ssTa5d6ff"Tb4b4b4, Te6edf3LocaleTb4b4b4.Te6edf3getDefaultTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3formatTb4b4b4(Te6edf3dateTb4b4b4)
Tff7b72val Te6edf3logEntry Tff7b72= Ta5d6ff"Ta5d6ff[Tffd700$Te6edf3timestampTa5d6ff] Tffd700$Te6edf3entryTa5d6ff"
Te6edf3LogTb4b4b4.Te6edf3dTb4b4b4(Te6edf3TAGTb4b4b4, Ta5d6ff"Ta5d6ffLog: Tffd700$Te6edf3logEntryTa5d6ff"Tb4b4b4)
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Te6edf3_packetLogTb4b4b4.Te6edf3value Tff7b72= Tb4b4b4(Te6edf3listOfTb4b4b4(Te6edf3logEntryTb4b4b4) Tff7b72+ Te6edf3_packetLogTb4b4b4.Te6edf3valueTb4b4b4)Tb4b4b4.Te6edf3takeTb4b4b4(T79c0ff5T79c0ff0Tb4b4b4)
Tb4b4b4}
Tff7b72private Tff7b72fun Tff7b72<Te6edf3T Tb4b4b4: Te6edf3ParcelableTff7b72> Te6edf3IntentTb4b4b4.Td2a8ffgetParcelableCompatTb4b4b4(Te6edf3keyTb4b4b4: Tffa657StringTb4b4b4, Te6edf3clazzTb4b4b4: Te6edf3ClassTff7b72<Te6edf3TTff7b72>Tb4b4b4)Tb4b4b4: Te6edf3T? Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3BuildTb4b4b4.Te6edf3VERSIONTb4b4b4.Te6edf3SDK_INT Tff7b72>Tff7b72= Te6edf3BuildTb4b4b4.Te6edf3VERSION_CODESTb4b4b4.Te6edf3TIRAMISUTb4b4b4) Tb4b4b4{
Te6edf3getParcelableExtraTb4b4b4(Te6edf3keyTb4b4b4, Te6edf3clazzTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffDEPRECATIONTa5d6ff"Tb4b4b4)
Te6edf3getParcelableExtraTb4b4b4(Te6edf3keyTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.1s